package 设计原则.开闭原则.improve;

//改进的思路分析
//思路:把创建Shape类做成抽象类，并提供- - 个抽象的draw方法，让子类去实现即可，
//这样我们有新的图形种类时，只需要让新的图形类继承Shape，并实现draw方法即可，
//使用方的代码就不需要修->满足了开闭原则
public class OcpUpdate {
    public static void main(String[] args) {
        //使用看看存在的问题
        GraphicEditorUpdate graphicEditor = new GraphicEditorUpdate();
        graphicEditor.drawShape(new RectangleUpdate());
        graphicEditor.drawShape(new CircleUpdate());
        graphicEditor.drawShape(new TriangleUpdate());
    }
}

//这是一个用于绘图的类
class GraphicEditorUpdate {
    //接收Shape对象，然后根据type绘制不同图形
    public void drawShape(ShapeUpdate s) {
        s.draw();
    }
}

//Shape类，基类
abstract class ShapeUpdate {
    int m_type;
    public abstract void draw();//抽象方法
}

class RectangleUpdate extends ShapeUpdate {
    public RectangleUpdate() {
        super.m_type = 1;
    }

    @Override
    public void draw() {
        System.out.println("绘制矩形");
    }
}

class CircleUpdate extends ShapeUpdate {
    public CircleUpdate() {
        super.m_type = 2;
    }

    @Override
    public void draw() {
        System.out.println("绘制圆形");
    }
}

class TriangleUpdate extends ShapeUpdate {
    TriangleUpdate() {
        super.m_type = 3;
    }

    @Override
    public void draw() {
        System.out.println("绘制三角形");
    }
}